home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 126-150 / disk_126 / suplib / wildcmp.c < prev    next >
C/C++ Source or Header  |  1992-05-06  |  843b  |  60 lines

  1.  
  2. /*
  3.  * Compare a wild card name with a normal name
  4.  */
  5.  
  6. #define    MAXB   8
  7.  
  8. wildcmp(wild, name)
  9. char *wild, *name;
  10. {
  11.     register char *w = wild;
  12.     register char *n = name;
  13.     char *back[MAXB][2];
  14.     int    bi = 0;
  15.  
  16.     while (*n || *w) {
  17.     switch (*w) {
  18.     case '*':
  19.         if (bi == MAXB) {
  20.         puts ("Too many levels of '*'");
  21.         return (0);
  22.         }
  23.         back[bi][0]    = w;
  24.         back[bi][1]    = n;
  25.         ++bi;
  26.         ++w;
  27.         continue;
  28. goback:
  29.         --bi;
  30.         while (bi >= 0 && *back[bi][1] == '\0')
  31.         --bi;
  32.         if (bi < 0)
  33.         return (0);
  34.         w =    back[bi][0] + 1;
  35.         n =    ++back[bi][1];
  36.         ++bi;
  37.         continue;
  38.     case '?':
  39.         if (!*n) {
  40.         if (bi)
  41.             goto goback;
  42.         return (0);
  43.         }
  44.         break;
  45.     default:
  46.         if (*n != *w) {
  47.         if (bi)
  48.             goto goback;
  49.         return (0);
  50.         }
  51.         break;
  52.     }
  53.     if (*n)     ++n;
  54.     if (*w)     ++w;
  55.     }
  56.     return (1);
  57. }
  58.  
  59.  
  60.